/* TCSS 590A - Cybernetics and Systems
 * Group Project - Modeling
 * By Barry Jones, Naren Meadem, Michael Pitts, Yuan Tao
 * Fall 2012, University of Washington, Tacoma
 */
package model.delayed;


/**
 * The interface for a random generator.
 * @author Michael Pitts
 * @version Nov 16, 2012
 */
public interface Generator
{

	/**
	 * Generates a random long value, which could be positive or negative.
	 * If zero, no event was generated this time.
	 * @return zero for no event, or a non-zero event.
	 */
	public long generate(final long the_time);
	
	/**
	 * Generates a random delay, which will always be non-negative.
	 * @return zero if no event was generated by a call to generate, or a 
	 * positive integer if an event was generated by the last call to generate.
	 * @see Generator#generate()
	 */
	public int delay(final long the_time);
	
	/**
	 * Generates a new random event.
	 * @param the_time is a time value used to generate Event data.
	 * @return a new Event Object if an event occurred, or null otherwise.
	 */
	public Event getEvent(final long the_time);
}
